/* 
 *
 * Persistence4J - Simple library for data persistence using java
 * Copyright (c) 2010, Avdhesh yadav.
 * http://www.avdheshyadav.com
 * Contact: avdhesh.yadav@gmail.com
 *
 * This library is free software; you can redistribute it and/or modify it under the terms
 * of the GNU Lesser General Public License as published by the Free Software Foundation,
 * either version 3 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License along with this
 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307, USA.
 *
 */

package com.avdy.p4j.jdbc.dbms.connfactory;

import java.sql.Connection;
import java.sql.SQLException;

import javax.transaction.UserTransaction;

import org.apache.log4j.Logger;

import com.avdy.p4j.jdbc.dbms.DataSourceAttr;
import com.avdy.p4j.jdbc.dbms.connfactory.xa.XAProvider;
import com.avdy.p4j.jdbc.dbms.connfactory.xa.XAProviderFactory;



/**
 * @author Avdhesh Yadav - Avdhesh.Yadav@Gmail.com     
 */
abstract class AbsDBConnector
{
	private static Logger logger = Logger.getLogger(AbsDBConnector.class.getName());
	//
	protected String m_Database;
	//
	protected XAProvider mXaProvider;

	/**
	 * @param provider String
	 * @param database String
	 * @param dsAttr DataSourceAttr
	 * 
	 * 
	 * @throws Exception
	 */
	public AbsDBConnector(String provider,String database, DataSourceAttr dsAttr)throws Exception
	{
		m_Database = database;
		mXaProvider  = XAProviderFactory.getXAProvider(provider,database,dsAttr);
	}
	
	/**
	 * 
	 * @return Connection
	 * 
	 * @throws Exception
	 * 
	 */
	public Connection getConnection() 
	{
		logger.debug("getting connection from XA pool");
		try 
		{
			return mXaProvider.getConnection();
		} 
		catch (SQLException e) 
		{
			logger.error("getting connection from XA pool:"+e.getMessage());
		}
		return null;
	}

	
	/**
	 * 
	 * @return UserTransaction
	 */
	public UserTransaction getUserTransaction()
	{
		return mXaProvider.getXAUserTransaction();
	}
	
	
	/**
	 * @return String
	 */
	public String getDatabaseName()
	{
		return m_Database;
	}
	
	
	/**
	 * This method stops the connection pool and  TMService
	 */
	public void stop()
	{
		mXaProvider.stop();
	}
}